/**
 * 生成指定天数范围内的随机日期时间
 * @param {number} days 天数范围（从现在往前推）
 * @returns {Date} 随机日期时间
 */
export function getRandomDateTime(days = 30) {
  const now = new Date()
  const timestamp = now.getTime()
  const randomOffset = Math.floor(Math.random() * days * 24 * 60 * 60 * 1000)
  return new Date(timestamp - randomOffset)
}

/**
 * 从数组中随机获取指定数量的元素
 * @param {Array} array 源数组
 * @param {number} count 需要的元素数量
 * @returns {Array} 随机选取的元素数组
 */
export function getRandomElements(array, count) {
  const shuffled = [...array].sort(() => 0.5 - Math.random())
  return shuffled.slice(0, count)
}

/**
 * 生成随机的中文姓名
 * @returns {string} 随机中文姓名
 */
export function getRandomChineseName() {
  const surnames = '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜'
  const names = '世永书林志明永浩宇航瑞霖浩轩梓睿子涵瑾萱梦琪欣妍雨桐宝儿晨曦语汐'
  
  const surname = surnames[Math.floor(Math.random() * surnames.length)]
  const nameLength = Math.random() > 0.5 ? 1 : 2
  let name = ''
  for (let i = 0; i < nameLength; i++) {
    name += names[Math.floor(Math.random() * names.length)]
  }
  
  return surname + name
}

/**
 * 生成随机的手机号码
 * @returns {string} 随机手机号码
 */
export function getRandomPhoneNumber() {
  const prefixes = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '150', '151', '152', '153', '155', '156', '157', '158', '159', '180', '181', '182', '183', '184', '185', '186', '187', '188', '189']
  const prefix = prefixes[Math.floor(Math.random() * prefixes.length)]
  const suffix = Math.floor(Math.random() * 100000000).toString().padStart(8, '0')
  return prefix + suffix
}

/**
 * 生成随机的地址
 * @returns {string} 随机地址
 */
export function getRandomAddress() {
  const provinces = ['北京市', '上海市', '广东省', '浙江省', '江苏省', '山东省', '四川省']
  const cities = ['朝阳区', '浦东新区', '广州市', '杭州市', '南京市', '济南市', '成都市']
  const streets = ['中关村大街', '陆家嘴路', '天河路', '西湖大道', '夫子庙街', '泉城路', '春熙路']
  const buildings = ['科技大厦', '金融中心', '商务广场', '创业园', '软件园', '国际中心', '商业大厦']
  
  const province = provinces[Math.floor(Math.random() * provinces.length)]
  const city = cities[Math.floor(Math.random() * cities.length)]
  const street = streets[Math.floor(Math.random() * streets.length)]
  const building = buildings[Math.floor(Math.random() * buildings.length)]
  const number = Math.floor(Math.random() * 1000) + 1
  
  return `${province}${city}${street}${number}号${building}`
}

/**
 * 生成随机的金额
 * @param {number} min 最小金额
 * @param {number} max 最大金额
 * @param {number} decimals 小数位数
 * @returns {string} 随机金额字符串
 */
export function getRandomAmount(min = 0, max = 10000, decimals = 2) {
  const amount = Math.random() * (max - min) + min
  return amount.toFixed(decimals)
}

/**
 * 生成随机的SKU编码
 * @param {string} prefix SKU前缀
 * @param {number} length 编码长度（不包含前缀）
 * @returns {string} 随机SKU编码
 */
export function getRandomSKU(prefix = 'SKU', length = 6) {
  const characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  let result = prefix
  for (let i = 0; i < length; i++) {
    result += characters[Math.floor(Math.random() * characters.length)]
  }
  return result
}

/**
 * 生成随机的批次号
 * @returns {string} 随机批次号
 */
export function getRandomBatchNumber() {
  const date = new Date()
  const year = date.getFullYear()
  const month = (date.getMonth() + 1).toString().padStart(2, '0')
  const day = date.getDate().toString().padStart(2, '0')
  const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0')
  return `BN${year}${month}${day}${random}`
}

/**
 * 生成随机的物流单号
 * @param {string} prefix 物流公司前缀
 * @returns {string} 随机物流单号
 */
export function getRandomTrackingNumber(prefix = 'SF') {
  const date = new Date()
  const timestamp = date.getTime().toString().slice(-8)
  const random = Math.floor(Math.random() * 1000000).toString().padStart(6, '0')
  return `${prefix}${timestamp}${random}`
}

/**
 * 生成随机的仓位编码
 * @returns {string} 随机仓位编码
 */
export function getRandomLocation() {
  const area = String.fromCharCode(65 + Math.floor(Math.random() * 5)) // A-E
  const row = Math.floor(Math.random() * 20) + 1 // 1-20
  const column = Math.floor(Math.random() * 10) + 1 // 1-10
  const level = Math.floor(Math.random() * 5) + 1 // 1-5
  return `${area}-${row.toString().padStart(2, '0')}-${column.toString().padStart(2, '0')}-${level}`
} 